public class EVDataSet {

	private ArrayList<ElectricVehicle> vehicleList;

	public EVDataSet() {
		vehicleList = new ArrayList<>();
	}

	// *** THIS IS THE SOLUTION FROM THE COLLEGE BOARD ***
	/**
	 * Returns a list of the model names of electric vehicles
	 * whose range, in miles, is greater than target,
	 * without any duplicate model names
	 * Preconditions: vehicleList is not null.
	 * No elements of vehicleList are null.
	 * Postcondition: vehicleList is unchanged.
	 */
	public ArrayList<String> getHighRangeVehicles(int target) {
		ArrayList<String> highRangeModels = new ArrayList<>();
		for(ElectricVehicle ev : vehicleList) {
			String model = ev.getModelName();
			if(ev.getRange() > target) {
				boolean found = false;
				for(String s: highRangeModels) {
					if(s.equals(model)) {
						found = true;
					}
				}
				if(!found) {
					highRangeModels.add(model);
				}
			}
		}
		return highRangeModels;
	}	
	

        // *** BELOW ARE ALTERNATE SOLUTIONS ***
	
	// Separate "contains" method to insert only if it doesn't exist
	public ArrayList<String> getHighRangeVehicles1(int target) {
		ArrayList<String> highRangeModels = new ArrayList<>();
		for(ElectricVehicle ev : vehicleList) {
			String model = ev.getModelName();
			if(ev.getRange() > target) {
				if(!contains(highRangeModels, model)) {
					highRangeModels.add(model);
				}
			}
		}
		return highRangeModels;
	}
	public boolean contains(ArrayList<String> a, String s) {
		for(String s1 : a) {
			if(s1.equals(s)) {
				return true;
			}
		}
		return false;
	}
	
	// Using Arraylist .contains() method:
	public ArrayList<String> getHighRangeVehicles2(int target) {
		ArrayList<String> highRangeModels = new ArrayList<>();
		for(ElectricVehicle ev : vehicleList) {
			String model = ev.getModelName();
			if(ev.getRange() > target && !highRangeModels.contains(model)) {
				highRangeModels.add(model);
			}
		}
		return highRangeModels;
	}

	// ** THESE ARE MORE METHODS TO COMPLETE AND TEST THE CLASS

	public void add(ElectricVehicle ev) {
		vehicleList.add(ev);
	}
	
	public void add(String model, int range) {
		vehicleList.add(new ElectricVehicle(model, range));
	}
	
	@Override
	public String toString() {
		String s = "";
		for(ElectricVehicle ev : vehicleList) {
			s += ev.toString() + '\n';
		}
		return s;
	}

	public static void main(String[] args) {
		EVDataSet vehicles = new EVDataSet();
		vehicles.add("Eco 6", 200);
		vehicles.add("Hallo", 300);
		vehicles.add("QTK2", 250);
		vehicles.add("Nu EV", 270);
		vehicles.add("QTK2", 220);
		vehicles.add("Ekstat", 190);
		System.out.println(vehicles);
		System.out.println(vehicles.getHighRangeVehicles(215));
	}
}